home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / vbdatabs / treeprt.h < prev    next >
C/C++ Source or Header  |  1999-03-14  |  4KB  |  102 lines

  1. // ------------------------------- //
  2. // -------- Start of File -------- //
  3. // ------------------------------- //
  4. // ----------------------------------------------------------- //
  5. // C++ Header File Name: treeprt.h
  6. // Compiler Used: MSVC40, DJGPP 2.7.2.1, GCC 2.7.2.1, HP CPP 10.24
  7. // Produced By: Doug Gaer   
  8. // File Creation Date: 01/23/1997 
  9. // Date Last Modified: 03/15/1999
  10. // Copyright (c) 1997 Douglas M. Gaer
  11. // ----------------------------------------------------------- // 
  12. // ---------- Include File Description and Details  ---------- // 
  13. // ----------------------------------------------------------- // 
  14. /*
  15. The VBD C++ classes are copyright (c) 1997, by Douglas M. Gaer.
  16. All those who put this code or its derivatives in a commercial
  17. product MUST mention this copyright in their documentation for
  18. users of the products in which this code or its derivative
  19. classes are used. Otherwise, you have the freedom to redistribute
  20. verbatim copies of this source code, adapt it to your specific
  21. needs, or improve the code and release your improvements to the
  22. public provided that the modified files carry prominent notices
  23. stating that you changed the files and the date of any change.
  24.  
  25. THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND.
  26. THE ENTIRE RISK OF THE QUALITY AND PERFORMANCE OF THIS SOFTWARE
  27. IS WITH YOU. SHOULD ANY ELEMENT OF THIS SOFTWARE PROVE DEFECTIVE,
  28. YOU WILL ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR, OR
  29. CORRECTION.
  30.  
  31. Tree printing functions used to debug the code that works with
  32. (R)ed (B)lack binary search trees.   
  33. */
  34. // ----------------------------------------------------------- //   
  35. #ifndef __TREEPRT_HPP
  36. #define __TREEPRT_HPP
  37.  
  38. #include "bnodeb.h"
  39. #include "bnode.h"
  40. #include "rbnode.h"
  41.  
  42. // PrtFunc is a pointer to void(BNodeBase *Node) which
  43. // points to a function used for the print action
  44. typedef void (*PrtFunc)(BNodeBase *n);
  45.  
  46. // NodeWidthFunc is a pointer to int(BNodeBase *Node) which 
  47. // points to a function used to return the printing width
  48. // of a node
  49. typedef int (*NodeWidthFunc)(BNodeBase *n);
  50.  
  51. template<class TYPE>
  52. class PrtClass
  53. {
  54. public:
  55.   static void PrtNode(BNodeBase *n) { cout << ((BNode<TYPE> *)n)->Data; }
  56.  
  57.   static void PrtNodeWSpace(BNodeBase *n) {
  58.     cout << ((BNode<TYPE> *)n)->Data << ' ';
  59.   }
  60.  
  61.   static void PrtRBNodeWSpace(BNodeBase *n) {
  62.     cout << ((RBNode<TYPE> *)n)->Data << ' '; }
  63.  
  64.   static void PrtRBNode(BNodeBase *n);
  65.   static int NodeWidth(BNodeBase *n);
  66.   static int RBNodeWidth(BNodeBase *n);
  67.  
  68. private:
  69.   // No Data
  70. };
  71.  
  72. class BNodeXY : public BNodeBase
  73. {
  74. public:
  75.   BNodeXY *GetLeft() { return (BNodeXY *)Left; }
  76.   BNodeXY *GetRight() { return (BNodeXY *)Right; }
  77.  
  78. public:
  79.   int x, y;
  80. };
  81.  
  82. template<class TYPE>
  83. inline void PrtClass<TYPE>::PrtRBNode(BNodeBase *n)
  84. {
  85.   RBNode<TYPE> *p = (RBNode<TYPE> *)n;
  86.   cout << p->Data;
  87.   if (p->color == RedNode) cout << "-RED"; else cout << "-BLACK";
  88. }
  89.  
  90. // Standalone functions that operate on BNodeBase pointers.
  91. // This implementation provides maximum code sharing.
  92. void PrintUp(BNodeBase *root, PrtFunc PrtNode, NodeWidthFunc NodeWidth);
  93. void PrintSideWays(BNodeBase *t, PrtFunc PrtNode, int inc, int space=0);
  94. void TestTraversals(BNodeBase *root, VisitFunc Visit);
  95. void TestTraversalsII(BNodeBase *root, VisitFunc Visit);
  96.  
  97. #endif // __TREEPRT_HPP
  98. // ----------------------------------------------------------- // 
  99. // ------------------------------- //
  100. // --------- End of File --------- //
  101. // ------------------------------- //
  102.